本篇將介紹個人撰寫,稍後會於網頁聊天室會用到的javaScript方法
對firestore文件有興趣的朋友,看這裡
.get()
方法會回傳PromiseQuerySnapshot
物件,其中的empty
屬性為布林值,true表示該collection為空,反之存在{ source: 'server' }
表示只取得伺服器的資料,否則他可能會取得cache或本地資料,如此無從判斷該collection是否已存在伺服器中callback
與fail
兩個回調函式,用以取得異步呼叫的結果,當Promise成功時調用callback
,失敗時調用fail
var CollectionExisted = (collection, callback, fail) => {
try {
collection.get({ source: 'server' })
.then(
result => {
callback(!result.empty);
},
err => {
fail(err);
}
);
} catch (e) {
console.log(`CollectionExisted Error: ${e}`);
}
}
callback
與fail
回調函式orderByField
,用以指定查詢資料的排序的欄位(field
)名稱collection.get()
方法取得資料,若orderByField不為空,加上.orderBy(orderByField)
排序查詢的資料var GetRecords = (collection, callback, fail, orderByField = '') => {
try {
var query = null;
if (orderByField) {
query = collection.orderBy(orderByField).get({ source: 'server' });
} else {
query = collection.get({ source: 'server' });
}
query.then(
result => {
callback(result);
},
err => {
fail(err);
}
);
} catch (e) {
console.log(`GetRecords Error: ${e}`);
}
}
callback
與fail
回調函式collection.add()
方法將資料寫入collection中,伺服器會為該document建立維一值的ID,寫入的資料便在該document下DocumentReference
,該物件下有許多屬性可供使用,如.id
為該新建立Document的idvar InsertData = (collection, data, callback, fail) => {
try {
collection.add(data)
.then(
result => {
callback(result);
},
err => {
fail(err);
}
);
} catch (e) {
console.log(`InsertData Error: ${e}`);
}
}
callback
與fail
回調函式sortField
排序欄位名稱,其不為空時調用collection.orderBy(sortField)
collection.onSnapshot()
,為QuerySnapshot
事件附加監聽器,該監聽器可透過呼叫onSnapshot
回傳的方法卸除.docChanges()
,該方法可取得變化的資料,型別為陣列,這裡透過.forEach()逐一取出並調用callback做下一步處理var ListenToAllChange=(collection,callback,fail,sortField='')=>{
try{
var query=collection;
if(sortField){
query=query.orderBy(sortField);
}
query.onSnapshot(querySnapshot=>{
querySnapshot.docChanges().forEach(ele=>{
callback(ele);
});
},
err=>{
fail(err);
});
}catch(e){
console.log(`ListenToAllChange Error: ${e}`);
}
}